# 类属性：就是类对象所拥有的属性，它被所有类对象的实例对象所共有，类对象和实例对象可以访问
# 实例属性：实例对象所拥有的属性，只能通过实例对象访问
class Person:
    country="中国"   #类属性
    def __init__(self,name):
        self.name=name    #实例属性
        pass
    pass
xiaoming=Person("小明")
print(xiaoming.country)    #类属性可以被实例对象与类对象共同访问
print(Person.country)
print(xiaoming.name)    #实例属性只能被实例对象所访问
# print(Person.name)     #类对象不能访问实例属性会报错

# 如果需要在类外修改类属性，必须通过类对象去引用然后进行修改。
# 如果通过实例对象去引用，会产生一个同名的实例属性，这种方式修改的是实例属性，不会影响到类属性，
# 并且之后如果通过实例对象去引用该名称的属性，实例属性会强制屏蔽掉类属性，即引用的是实例属性，
# 除非删除了该实例属性

# 动态添加属性
xiaoming.age=20    #动态添加一个实例属性
print(xiaoming.age)
xiaohong=Person("小红")
# print(xiaohong.age)   #小明的age属性属于实例属性，小红不能访问
# print(Person.age)   #类对象不能访问实例属性
print("==================================")
xiaoming.country="China"  #此处会生成一个和类属性同名的实例属性，本质上修改属性的值是在修改实例属性的值
print(xiaoming.country)
print(xiaohong.country)
print(Person.country)

# 若想要修改类属性，则必须要使用类对象进行操作
Person.country="CHINA"
print(xiaoming.country)   #小明访问的是实例属性
print(xiaohong.country)   #小红访问的是类属性
print(Person.country)
